package handlers

import (
	"fmt"
	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
	"gitverse.ru/EdieLay/BirthdayReminderer/utils"
	"log"
	"os"
)

// Start отправляет сообщение с просьбой ввести имя, фамилию и день рождения.
func Start(bot *tgbotapi.BotAPI, userID int64) {
	msg := tgbotapi.NewMessage(userID, "Пожалуйста, введите Ваше имя, фамилию и день рождения (ДД.ММ.ГГГГ).")
	_, err := bot.Send(msg)
	if err != nil {
		log.Print(err)
	}
}

// Leave удаляет пользователя из списка участников и исключает его из чата.
func Leave(bot *tgbotapi.BotAPI, userID int64, users map[int64]utils.User, chatID int64, dataFile string) {
	if _, ok := users[userID]; ok {
		err := utils.KickChatMember(os.Getenv("TELEGRAM_APITOKEN"), chatID, userID)
		if err != nil {
			log.Print(err)
			msg := tgbotapi.NewMessage(userID, "Произошла ошибка при попытке покинуть чат.")
			_, err := bot.Send(msg)
			if err != nil {
				log.Print(err)
			}
			return
		}
		delete(users, userID)
		err = utils.SaveUsers(users, dataFile)
		if err != nil {
			log.Print(err)
		}
		msg := tgbotapi.NewMessage(userID, "Вы успешно покинули список участников.")
		_, err = bot.Send(msg)
		if err != nil {
			log.Print(err)
		}
	} else {
		msg := tgbotapi.NewMessage(userID, "Вы не были добавлены в список участников.")
		_, err := bot.Send(msg)
		if err != nil {
			log.Print(err)
		}
	}
}

// AddUser добавляет пользователя в список участников.
func AddUser(bot *tgbotapi.BotAPI, userID int64, users map[int64]utils.User, chatID int64, message string, dataFile string) {
	user, err := utils.ParseUser(message)
	if err != nil {
		msg := tgbotapi.NewMessage(userID, "Неправильно введены данные. Пожалуйста, введите Ваше имя, фамилию и день рождения (ДД.ММ.ГГГГ).")
		_, err := bot.Send(msg)
		if err != nil {
			log.Print(err)
		}
		return
	}

	users[userID] = user
	inviteLinkConfig := tgbotapi.ChatInviteLinkConfig{
		ChatConfig: tgbotapi.ChatConfig{
			ChatID: chatID,
		},
	}
	inviteLink, err := bot.GetInviteLink(inviteLinkConfig)
	if err != nil {
		log.Fatal(err)
	}

	text := fmt.Sprintf("Спасибо, %s! Вот ссылка на вступление в общий чат: %s.", user.FirstName, inviteLink)
	err = utils.SaveUsers(users, dataFile)
	if err != nil {
		log.Print(err)
	}
	msg := tgbotapi.NewMessage(userID, text)
	_, err = bot.Send(msg)
	if err != nil {
		log.Print(err)
	}
}

// NoBirthdayChat отправляет сообщение о том, что общая беседа не создана.
func NoBirthdayChat(bot *tgbotapi.BotAPI, userID int64) {
	msg := tgbotapi.NewMessage(userID, "Общая беседа не создана. Пожалуйста, обратитесь к администратору.")
	_, err := bot.Send(msg)
	if err != nil {
		log.Print(err)
	}
}
